package xyz.haijin.flow.liteflow.dto;

import lombok.Data;
import java.util.List;

/**
 * Vue Flow请求DTO
 * 
 * @author haijin
 * @since 1.0.0
 */
@Data
public class VueFlowRequest {

    /**
     * 节点列表
     */
    private List<VueFlowNode> nodes;

    /**
     * 连线列表
     */
    private List<VueFlowEdge> edges;

    /**
     * Vue Flow节点
     */
    @Data
    public static class VueFlowNode {
        /**
         * 节点唯一ID
         */
        private String id;

        /**
         * 节点类型
         */
        private String type;

        /**
         * 节点位置
         */
        private Position position;

        /**
         * 节点数据
         */
        private NodeData data;

        /**
         * 位置信息
         */
        @Data
        public static class Position {
            private Double x;
            private Double y;
        }

        /**
         * 节点数据
         */
        @Data
        public static class NodeData {
            /**
             * 节点显示文本
             */
            private String label;

            /**
             * 节点类型：component(业务组件) 或 logic(逻辑节点)
             */
            private String nodeType;

            /**
             * 对应的LiteFlow组件ID或EL表达式片段
             */
            private String value;
        }
    }

    /**
     * Vue Flow连线
     */
    @Data
    public static class VueFlowEdge {
        /**
         * 连线唯一ID
         */
        private String id;

        /**
         * 源节点ID
         */
        private String source;

        /**
         * 目标节点ID
         */
        private String target;

        /**
         * 源节点的连接点
         */
        private String sourceHandle;

        /**
         * 目标节点的连接点
         */
        private String targetHandle;

        /**
         * 连线数据
         */
        private EdgeData data;

        /**
         * 连线数据
         */
        @Data
        public static class EdgeData {
            /**
             * 连线条件，用于SWITCH逻辑
             */
            private String condition;
        }
    }
}
